import cv2
import numpy as np

# 读取图像
image = cv2.imread('input_data/src.jpg')

# 将图像转换为灰度图
gray_image = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)

# 使用高斯模糊进行噪声过滤
blurred_image = cv2.GaussianBlur(gray_image, (5, 5), 0)
# # 或者使用中值滤波进行噪声过滤
# filtered_image = cv2.medianBlur(gray_image, 5)

# 定义多个灰度阈值
threshold_values = [32, 64, 128, 192]

# 初始化一个空白的输出图像（用于存储灰度区域）
overlay = np.zeros_like(image)

# 定义透明度
alpha = 0.5  # 半透明效果，0为完全透明，1为完全不透明

# 应用多个阈值，生成不同的灰度区域
for i, threshold in enumerate(threshold_values):
    # 二值化图像
    _, binary_image = cv2.threshold(gray_image, threshold, 255, cv2.THRESH_BINARY)
    
    # 将当前区域的像素值设置为一个特定的灰度值
    color = (255 * (i + 1) // len(threshold_values),) * 3  # 生成灰度颜色（BGR格式）
    overlay[binary_image > 0] = color

# 将灰度区域叠加到原图上
result = cv2.addWeighted(image, 1, overlay, alpha, 0)

# 显示原始图像、灰度图像和处理后的图像
cv2.imshow('Original Image', image)
cv2.imshow('Gray Image', gray_image)
cv2.imshow('Result Image', result)

# 等待按键按下后关闭所有窗口
cv2.waitKey(0)
cv2.destroyAllWindows()